import { WatchStopHandle } from "vue";


export enum MsgCodes {
    //系统初始化
    SYSTEM_INITIALIZE = 10000,
    //系统模式设置
    SYSTEM_SET_MODE = 10001,
    //系统重置
    SYSTEM_RESET = 10003,
    //重置
    SYSTEM_QUIT = 10004,
    //鼠标跟随标签
    SYSTEM_LABEL = 10005,
    //系统提示框
    SYSTEM_MESSAGE = 10006,
    //系统警告
    SYSTEM_WARNING = 10007,
    //获取资源路径
    SYSTEM_GET_ASSET = 10008,
    // 视角模块消息码定义
    //获取视角目录数据
    VIEW_DATA_MENU = 11000,
    //通过ID获取视角详细配置数据
    VIEW_DATA_CONFIG = 11001,

    // 工具操作模块消息码定义
    ///////////////////////////////////数据相关////////////////////////////////
    TOOL_DATA_CONFIG = 12000,//获取工具配置信息数据
    TOOL_DATA_ANIMATION = 12001,//获取工具初始化动画数据
    ///////////////////////////////////工具组装相关////////////////////////////
    TOOL_ASSEMBLE_COMBINATION = 12101,//工具组合
    TOOL_ASSEMBLE_DISASSEMBLE = 12102,//工具分解
    TOOL_ASSEMBLE_MOVE_CONTAINER = 12103,//移动至工具箱
    TOOL_ASSEMBLE_MOVE_CACHE_AREA = 12104,//移动至待组合区
    TOOL_ASSEMBLE_MOVE_USE_AREA = 12105,//移动至工具使用区
    ///////////////////////////////////工具信息相关////////////////////////////
    TOOL_MOVE_SHIFT_IN = 12201,//移入工具
    TOOL_MOVE_SHIFT_OUT = 12202,//移出工具
    ///////////////////////////////////工具使用相关////////////////////////////
    TOOL_USE_START = 12301,//开始使用工具
    TOOL_USE_OVER = 12302,//工具使用完成
    TOOL_OPERATE = 12303,//工具操作
    TOOL_TAKE_UP = 12304,//工具拿起
    TOOL_PUTBACK = 12305,//工具放回使用区
    TOOL_PUTBACK_CONTAINER = 12306,//工具放回工具箱
    ///////////////////////////////////工具效果相关////////////////////////////
    TOOL_SHINE = 12401,//工具发光设置（发光）
    ///////////////////////////////////工具栏相关////////////////////////////
    TOOL_BAR_UPDATE = 12500,//工具栏信息更新
    TOOL_BAR_ARGUMENT = 12501,//工具参数设置
    TOOL_BAR_ICON = 12502,//工具图标
    TOOL_BAR_PUTBACK = 12503,//工具放回
    ///////////////////////////////////模拟操作////////////////////////////
    TOOL_SIMULATION_OPERATION = 12600,//模拟工具操作
    TOOL_SIMULATION_COMBINATION = 12601,//模拟组合操作
    TOOL_SIMULATION_DISASSEMBLE = 12602,//模拟分解操作
    TOOL_SIMULATION_TAKE_UP = 12603,//模拟拿起操作
    TOOL_SIMULATION_PUTBACK = 12604,//模拟放回使用区操作
    TOOL_SIMULATION_PUTBACK_CONTAINER = 12605,//模拟放回工具箱操作

    //拆装操作模块消息码定义
    ///////////////////////////////////项目相关////////////////////////////////
    DISASSEMBLY_PROJECT_GET = 13000,//获取拆装项目数据（前端》业务）
    DISASSEMBLY_PROJECT_SET = 13001,//设置拆装项目（前端》业务）
    ///////////////////////////////////步骤相关////////////////////////////
    DISASSEMBLY_STEP_GET = 13100,//获取步骤信息（前端》业务）
    DISASSEMBLY_STEP_SELECT = 13101,//选中步骤（业务》前端）
    DISASSEMBLY_STEP_GOTO = 13102,//选中步骤（前端》业务）
    DISASSEMBLY_STEP_COMPLETE = 13103,//发送步骤完成（业务》前端）
    ///////////////////////////////////零件操作相关////////////////////////////
    DISASSEMBLY_PART_OPERATE = 13200,//零件双击(单击)
    DISASSEMBLY_PART_MOVE_DEVICE = 13201,//零件移动至设备(车辆、台架等)
    DISASSEMBLY_PART_MOVE_TABLE = 13202,//零件移动至零件桌、零件车等
    DISASSEMBLY_PART_STATE_SET = 13203,//零件目标状态设置
    DISASSEMBLY_PART_SHINE = 13204,//零件发光设置（发光）
    DISASSEMBLY_PART_SHIFT_IN = 13205,//移入零件
    DISASSEMBLY_PART_SHIFT_OUT = 13206,//移出零件
    DISASSEMBLY_PART_OPERATE_COMPLETE = 13207,//零件操作完成
    ///////////////////////////////////UI零件车操作相关////////////////////////////
    DISASSEMBLY_PARTCAR_PUT_IN = 13300,//放入零件车
    DISASSEMBLY_PARTCAR_PUT_OUT = 13301,//移出零件车
    DISASSEMBLY_PARTCAR_SELECT = 13302,//选中零件车零件
    ///////////////////////////////////初始化数据////////////////////////////
    DISASSEMBLY_DATA_PART_CONFIG = 13400,//初始化零件数据
    ///////////////////////////////////模拟操作////////////////////////////
    DISASSEMBLY_SIMULATION_PART_OPERATE = 13500,//模拟零件双击(单击)
    ///////////////////////////////////辅助功能////////////////////////////
    DISASSEMBLY_ASSIST_LAST = 13600,//上一步(辅助)
    DISASSEMBLY_ASSIST_NEXT = 13601,//下一步(辅助)
    DISASSEMBLY_ASSIST_AUTO = 13602,//自动(辅助)
    DISASSEMBLY_ASSIST_CONTINUE = 13603,//持续自动(辅助)

    ///////////////////////////////////标定工单相关////////////////////////////
    CALIBRATION_PROJECT_GET = 14000,//获取拆装项目数据（前端》业务）
    CALIBRATION_PROJECT_SET = 14001,//设置拆装项目（前端》业务）
    CALIBRATION_ORDER_GET = 14002,//获取工单数据
    CALIBRATION_ORDER_UPDATE = 14003,    //更新工单数据
    CALIBRATION_FUNCTION_SHOW_DOR = 14004,   //显示标注线
    CALIBRATION_FUNCTION_SHOW_COORDINATES = 14005,  //显示坐标系
    CALIBRATION_FUNCTION_SHOW_RESULT = 14006,   //显示标定结果
    ///////////////////////////////////标定场景操作相关////////////////////////
    CALIBRATION_RENDER_DATA_DOR = 14100,//坐标标注数据



    //任务管理模块消息码定义
    TASK_GET_MENU = 15000, //获取任务目录
    TASK_UPDATE_MENU = 15001, //更新任务状态

    //评价模块消息码定义
    APPRAISE_SUBMIT = 16000, //提交
    APPRAISE_GET = 16001,  //获取评价
    APPRAISE_SUBMIT_ORDER = 16002,  //提交工单
    EXTENSION_QUATERNION_TRANSFORM = 17000, //四元数转换

    /// <summary>
    /// 结构原理消息段  40000 - 49999
    /// </summary>
    //获取结构树目录
    STRUCTURE_GET_TREE_MENU = 40000,
    //获取结构树目录节点数据
    STRUCTURE_GET_TREE_MENU_NODE = 40001,
    //获取所有任务
    STRUCTURE_GET_ALL_TASK = 40002,
    //设置任务内容
    STRUCTURE_SET_TASK = 40003,
    //获取任务目录数据
    STRUCTURE_GET_TASK_MENU = 40004,
    //获取操作数据
    STRUCTURE_GET_CURRENT_TASK = 40005,
    //更新操作数据
    STRUCTURE_UPDATE_CURRENT_TASK = 40006,
    //提交操作
    APPRAISE_SUBMIT_CURRENT_TASK = 40007,

    //设置模式
    // STRUCTURE_SET_MODEL = 20010,
    

}



/**
 * 消息码
 */
export default class MessageCode {
    private static instance: MessageCode = new MessageCode();
    /**
     * 消息码
     */
    public static get Default(): MessageCode {
        return this.instance;
    }

    constructor() {
        window.addEventListener('unload', this.Dispose.bind(this));
    }

    Dispose() {
        window.removeEventListener('unload', this.Dispose);

        for (const watchStopHandle of this.watchStopHandles) {
            watchStopHandle();
        }
        this.watchStopHandles.clear();
    }


    public MsgCodesList = MsgCodes

    private watchStopHandles: Array<WatchStopHandle> = [];

    public async Awake(): Promise<void> {
    }

    public async Destroy(): Promise<void> {
    }
}